<?php
/* -------------------------------------------------------------------------------------
* 	ID:						$Id: dp.php 275 2013-09-23 08:52:24Z phone.mueller@googlemail.com $
* 	Letzter Stand:			$Revision: 275 $
* 	zuletzt geaendert von:	$Author: siekiera $
* 	Datum:					$Date: 2013-09-23 08:52:24 +0000 (Mon, 23 Sep 2013) $
*
* 	SEO:mercari by Siekiera Media
* 	http://www.seo-mercari.de
*
* 	Copyright (c) since 2011 SEO:mercari
* --------------------------------------------------------------------------------------
* 	based on:
* 	(c) 2000-2001 The Exchange Project  (earlier name of osCommerce)
* 	(c) 2002-2003 osCommerce - www.oscommerce.com
* 	(c) 2003     nextcommerce - www.nextcommerce.org
* 	(c) 2005     xt:Commerce - www.xt-commerce.com
*
* 	Released under the GNU General Public License
* ----------------------------------------------------------------------------------- */

class dp {
    var $code, $title, $description, $icon, $enabled, $num_dp, $db;

	function __construct() {
		global $order, $db;
		
		$this->db = $db;
		$this->code = 'dp';
		$this->title = MODULE_SHIPPING_DP_TEXT_TITLE;
		$this->description = MODULE_SHIPPING_DP_TEXT_DESCRIPTION;
		$this->sort_order = MODULE_SHIPPING_DP_SORT_ORDER;
		$this->icon = DIR_WS_ICONS.'shipping_dp.gif';
		$this->tax_class = MODULE_SHIPPING_DP_TAX_CLASS;
		$this->enabled = ((MODULE_SHIPPING_DP_STATUS == 'True') ? true : false);
		
		if(($this->enabled == true) && ((int)MODULE_SHIPPING_DP_ZONE > 0) && isset($order)) {
		
			$check_flag = false;
			$check = $this->db->db_query("SELECT zone_id from ".TABLE_ZONES_TO_GEO_ZONES." WHERE geo_zone_id = '".MODULE_SHIPPING_DP_ZONE."' and zone_country_id = '".$order->delivery['country']['id']."' ORDER BY zone_id");
			while(!$check->EOF) {
				if ($check->fields['zone_id'] < 1) {
					$check_flag = true;
					break;
				} elseif ($check->fields['zone_id'] == $order->delivery['zone_id']) {
					$check_flag = true;
					break;
				}
				$check->MoveNext();
			}
			
			if ($check_flag == false)
				$this->enabled = false;
		}

		$this->num_dp = 6;
    }

    function quote($method = '') {
    	if(!free_shipping())
			return;
    	
		global $order, $shipping_weight, $shipping_num_boxes;
		
		$dest_country = $order->delivery['country']['iso_code_2'];
		$dest_zone = 0;
		$error = false;
		
		for ($i=1; $i<=$this->num_dp; $i++) {
			$countries_table = constant('MODULE_SHIPPING_DP_COUNTRIES_'.$i);
			$country_zones = explode(",", $countries_table);
			if (in_array($dest_country, $country_zones)) {
				$dest_zone = $i;
				break;
			}
		}

		if ($dest_zone == 0)
			$error = true;
		else {
			$shipping = -1;
			$dp_cost = constant('MODULE_SHIPPING_DP_COST_'.$i);
			
			$dp_table = preg_split("/[:,]/", $dp_cost);
			for ($i=0; $i<sizeof($dp_table); $i+=2) {
				if ($dp_table[$i] == -1 || $shipping_weight <= $dp_table[$i]) {
					$shipping = $dp_table[$i+1];
					$shipping_method = MODULE_SHIPPING_DP_TEXT_WAY.' '.$dest_country.': ';
					break;
				}
			}

      if ($shipping == -1) {
				$shipping_cost = 0;
				$shipping_method = MODULE_SHIPPING_DP_UNDEFINED_RATE;
	        } else
	        	$shipping_cost = ($shipping + MODULE_SHIPPING_DP_HANDLING);

		}

		$this->quotes = array('id' => $this->code,
		                    'module' => MODULE_SHIPPING_DP_TEXT_TITLE,
		                    'methods' => array(array('id' => $this->code,
		                                             'title' => $shipping_method,
		                                             'cost' => $shipping_cost * $shipping_num_boxes)));
		
		if ($this->tax_class > 0)
			$this->quotes['tax'] = get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
		
		if (not_null($this->icon)) 
			$this->quotes['icon'] = image($this->icon, $this->title);
		
		if ($error == true) 
			$this->quotes['error'] = MODULE_SHIPPING_DP_INVALID_ZONE;
		
		return $this->quotes;
    }

    function check() {
		if (!isset($this->_check)) {
			$check = $this->db->db_query("SELECT configuration_value FROM ".TABLE_CONFIGURATION." WHERE configuration_key = 'MODULE_SHIPPING_DP_STATUS'");
			$this->_check = $check->_numOfRows;
		}
		return $this->_check;
    }

	function install() {
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, set_function, date_added) VALUES ('MODULE_SHIPPING_DP_STATUS', 'True', '6', '0', 'cfg_select_option(array(\'True\', \'False\'), ', NOW())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_DP_HANDLING', '0', '6', '0', NOW())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, use_function, set_function, date_added) VALUES ('MODULE_SHIPPING_DP_TAX_CLASS', '0', '6', '0', 'get_tax_class_title', 'cfg_pull_down_tax_classes(', NOW())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, use_function, set_function, date_added) VALUES ('MODULE_SHIPPING_DP_ZONE', '0', '6', '0', 'get_zone_class_title', 'cfg_pull_down_zone_classes(', NOW())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_DP_SORT_ORDER', '0', '6', '0', NOW())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_DP_ALLOWED', '', '6', '0', NOW())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_DP_COUNTRIES_1', 'AD,AT,BE,CZ,DK,FO,FI,FR,GR,GL,IE,IT,LI,LU,MC,NL,PL,PT,SM,SK,SE,CH,VA,GB,SP', '6', '0', NOW())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_DP_COST_1', '5:16.50,10:20.50,20:28.50', '6', '0', NOW())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_DP_COUNTRIES_2', 'AL,AM,AZ,BY,BA,BG,HR,CY,GE,GI,HU,IS,KZ,LT,MK,MT,MD,NO,SI,UA,TR,YU,RU,RO,LV,EE', '6', '0', NOW())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_DP_COST_2', '5:25.00,10:35.00,20:45.00', '6', '0', NOW())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_DP_COUNTRIES_3', 'DZ,BH,CA,EG,IR,IQ,IL,JO,KW,LB,LY,OM,SA,SY,US,AE,YE,MA,QA,TN,PM', '6', '0', NOW())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_DP_COST_3', '5:29.00,10:39.00,20:59.00', '6', '0', NOW())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_DP_COUNTRIES_4', 'AF,AS,AO,AI,AG,AR,AW,AU,BS,BD,BB,BZ,BJ,BM,BT,BO,BW,BR,IO,BN,BF,BI,KH,CM,CV,KY,CF,TD,CL,CN,CC,CO,KM,CG,CR,CI,CU,DM,DO,EC,SV,ER,ET,FK,FJ,GF,PF,GA,GM,GH,GD,GP,GT,GN,GW,GY,HT,HN,HK,IN,ID,JM,JP,KE,KI,KG,KP,KR,LA,LS', '6', '0', NOW())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_DP_COST_4', '5:35.00,10:50.00,20:80.00', '6', '0', NOW())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_DP_COUNTRIES_5', 'MO,MG,MW,MY,MV,ML,MQ,MR,MU,MX,MN,MS,MZ,MM,NA,NR,NP,AN,NC,NZ,NI,NE,NG,PK,PA,PG,PY,PE,PH,PN,RE,KN,LC,VC,SN,SC,SL,SO,LK,SR,SZ,ZA,SG,TG,TH,TZ,TT,TO,TM,TV,VN,WF,VE,UG,UZ,UY,ST,SH,SD,TW,GQ,LR,DJ,CG,RW,ZM,ZW', '6', '0', NOW())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_DP_COST_5', '5:35.00,10:50.00,20:80.00', '6', '0', NOW())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_DP_COUNTRIES_6', 'DE', '6', '0', NOW())");
		$this->db->db_query("INSERT INTO ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) VALUES ('MODULE_SHIPPING_DP_COST_6', '5:6.70,10:9.70,20:13.00', '6', '0', NOW())");
    }

    function remove() {
    	$this->db->db_query("DELETE FROM ".TABLE_CONFIGURATION." WHERE configuration_key IN ('".implode("', '", $this->keys())."')");
    }

    function keys() {
    	$keys = array('MODULE_SHIPPING_DP_STATUS', 'MODULE_SHIPPING_DP_HANDLING','MODULE_SHIPPING_DP_ALLOWED', 'MODULE_SHIPPING_DP_TAX_CLASS', 'MODULE_SHIPPING_DP_ZONE', 'MODULE_SHIPPING_DP_SORT_ORDER');

		for ($i = 1; $i <= $this->num_dp; $i ++) {
			$keys[count($keys)] = 'MODULE_SHIPPING_DP_COUNTRIES_'.$i;
			$keys[count($keys)] = 'MODULE_SHIPPING_DP_COST_'.$i;
		}

    	return $keys;
    }
}
?>